package com.briup.day17;

/**
 * @author ThinkBook
 */
public class Test01_StaticInner {
    public static void main(String[] args) {
        //1.创建外部类对象
        Outer ot = new Outer();
        ot.test03();

        System.out.println("------------");

        //2.创建static内部类对象
        // 格式：外部类.内部类 引用 = new 外部类.内部类(实参列表);
        Outer.Inner inn = new Outer.Inner();
        inn.test01();
        inn.test02();
    }
}
class Outer{
    private int o_num = 10;
    private static int s_num = 20;
    /*
    * 静态成员内部类：
    * a.可以包含静态成员【数据，方法】
    * b.内部类方法中，只能访问外部类中static成员
    * */
    static class Inner{
        private int i_num = 10;
        private static int is_num = 20;

        //普通方法
        public void test01() {
            System.out.println("in Inner test01, i_num: " + i_num);
            // 不能访问外部类 普通成员 ERROR
            //System.out.println("o_num: " + o_num);
            // 访问外部类 静态成员 正常
            System.out.println("in Inner test01, s_num: " + s_num);
        }

        //静态方法：静态只能访问静态
        public static void test02() {
            //System.out.println("i_num: " + i_num); ERROR
            System.out.println("in Inner test02, is_num: " + is_num);
            System.out.println("in Inner test02, s_num: " + s_num);
        }
    }
    //外部类方法：访问内部类中成员
    public void test03() {
        System.out.println("in Outer test03, o_num: " + o_num);
        System.out.println("in Outer test03, s_num: " + s_num);
        //操作内部类成员                                   Outer.Inner.is_num
        System.out.println("in Outer test03, Inner.si_num: " + Inner.is_num);
        //Outer.Inner inn = new Outer.Inner();
        Inner inn = new Inner();
        System.out.println("in Outer test03, Inner.i_num: " + inn.i_num);
    }
}

